const { Controller } = require("egg");

class CodeController extends Controller {
    /**
     * 生成验证码
     */
    async create() {
        // 接收手机号
        const { mobile } = this.ctx.request.body;
        // 非空校验
        if (!mobile) {
            this.ctx.body = {
                code: 400,
                message: "缺少必须参数",
            };
            return;
        }
        // 校验手机号格式
        if (!/^1[3579]\d{9}$/.test(mobile)) {
            this.ctx.body = {
                code: 400,
                message: "手机号格式不正确",
            };
            return;
        }
        // 查询该手机号对应的验证码记录
        const codeObj = await this.service.code.findByMobile(mobile);
        // 验证码存在
        if (codeObj) {
            // 判断是不是在频繁生成验证码
            if (Date.now() - Date.parse(codeObj.create_time) < 60000) {
                this.ctx.body = {
                    code: 403,
                    message: "不允许频繁获取验证码",
                };
                return;
            }
            // 删除这个没用的验证码
            await this.service.code.deleteByMobile(mobile);
        }
        // 生成验证码
        const code = String(Math.random()).substr(2, 6);
        // 调用短信服务，发送验证码，给该手机号（考试没有这一步，因为我们没有短信服务）
        // 保存到数据
        const res = await this.service.code.add(mobile, code, new Date());
        // 判断是否插入成功
        if (res.affectedRows !== 1) {
            this.ctx.body = {
                code: 500,
                message: "验证码生成失败",
            };
            return;
        }
        // 返回成功
        this.ctx.body = {
            code: 201,
            message: "验证码发送成功",
        };
    }
}

module.exports = CodeController;
